#pragma once

#include <struct/query_context.hpp>
#include <data/value_node.hpp>

namespace blitz_query_cpp
{
    class introspection_query_handler
    {
        bool process_type(query_context &context, const type_reference &type_ref, const syntax_node* selection_set, value_node_t &output_node);
        bool process_field(query_context &context, const field &field_decl, const syntax_node *selection_set, value_node_t &output_node);
        bool process_input_field(query_context &context, const input_value &field_decl, const syntax_node *selection_set, value_node_t &output_node);
        bool process_schema(query_context &context, syntax_node *selection_set);
        bool process_directive(query_context &context, const directive_type &dir, const syntax_node *selection_set, value_node_t &output_node);
    public:
        bool process(query_context &context);
    };
}
